home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 005 / pcpm.arc / CPABAR.BAS (.txt) next >
Encoding:
GW-BASIC  |  1985-06-04  |  6.6 KB  |  241 lines

  1. 10  REM **** CPABAR ****
  2. 20  CLOSE
  3. 50  DEFINT B-Z:DEFSNG A:DEFSNG Q
  4. 52  DIM X$(12)
  5. 53  FOR I=1 TO 12
  6. 54  READ X$(I)
  7. 55  NEXT I
  8. 56  DATA "JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"
  9. 60  DIM T$(100),EF(500),ES(500),LF(500),R6$(500),D$(500),A(1500),A3(100)
  10. 62  B4=VAL(MID$(DATE$,1,2))
  11. 64  B5=VAL(MID$(DATE$,4,2))
  12. 66  B6=VAL(MID$(DATE$,9,2))
  13. 70  DEF FNV(I)=INT((I-1)*Q+1.5)
  14. 75  T1$=" EACH COLUMN WILL REPRESENT ###.## \            \ "
  15. 80  GOSUB 5000
  16. 90  GOSUB 9000   'READ LGS FILE
  17. 92  GOSUB 8000  'READ HOLIDAYS
  18. 95  GOSUB 7000  'FIGURE DAYS
  19. 100  PRINT "Output file will be ";F$;".BAR O.K. (Y/N) ";
  20. 102  INPUT Q$:IF Q$="N" THEN INPUT "Enter new name ";F$ ELSE F$=F$+".BAR"
  21. 105  OPEN F$ FOR OUTPUT AS #2
  22. 110  INPUT "Enter width for the chart. ENTER defaults to 90 : ",L
  23. 120  IF L<=0 OR L>95 THEN L=90 ELSE L=INT(L)
  24. 130  IF LEFT$(T6$,3)<>"WOR" AND LEFT$(T6$,3)<>"CAL" THEN PRINT "**** BAR CHARTS ONLY WORK ON PROJECTS WITH CALENDAR OR WORKING DAYS ****":GOTO 500
  25. 140  INPUT "Want Whole project or Portion (W/P) ",W$
  26. 150  V5=0'FLAG FOR WHETHER ALL ACTIVITIES ARE INCLUDED IN THE PORTION
  27. 160  IF LEFT$(W$,1)<>"P" THEN Q=C3/L:PRINT "****";:PRINT USING T1$;Q,T6$;:PRINT "****":GOTO 970
  28. 170  INPUT "Will several portions be placed together (Y/N/Help) ",Q$
  29. 180  IF LEFT$(Q$,1)="N" THEN 260 ELSE V5=1
  30. 190  IF LEFT$(Q$,1)="H" THEN 210 ELSE 260
  31. 210  PRINT:PRINT;"If you want to put several portions together, reply 'Y'. PCPM will space"
  32. 220  PRINT "activities within each portion so the activities which extend from one portion "
  33. 230  PRINT "to another will be in alignment when the barcharts are placed side by side."
  34. 250  V5=0:GOTO 170
  35. 260  IF T7=0 THEN INPUT "Enter beginning date in MMDDYY format ",A7 ELSE 292
  36. 280  GOSUB 1750      'FIND VALID DATE AND ARRAY A NUMBER
  37. 290  D5=J:GOTO 300
  38. 292  INPUT "Enter beginning time period number (integer) ",D5
  39. 294  IF D5<=0 OR D5>C3 THEN BEEP:PRINT "**** INVALID RESPONSE ****":GOTO 292
  40. 300  PRINT "Enter ending date (MMDDYY) or length in ";T6$;" ";
  41. 301  INPUT A7
  42. 320  IF A7<10000 THEN D7=A7:D6=D5+D7:GOTO 360
  43. 340  GOSUB 1750
  44. 350  D6=J
  45. 360  IF D6<=D5 THEN 260 ELSE Q=(D6-D5)/L
  46. 365  PRINT "****";:PRINT USING T1$;Q,T6$;:PRINT "****":GOTO 970
  47. 400  PRINT #2,G9$
  48. 410  PRINT #2,TAB(36);
  49. 420  GOSUB 850
  50. 430  INPUT "Want another Bar Chart from the same run (N/Y) ",Q$
  51. 490  IF LEFT$(Q$,1)="Y" THEN 110
  52. 500  CLOSE #2
  53. 510  CHAIN "CPAMENU"
  54. 550  REM
  55. 560  FOR I=1 TO L+1
  56. 580  A6=A(FNV(I)+D5-1)
  57. 590  GOSUB 910
  58. 600  T$(I)=P6$
  59. 610  NEXT I
  60. 650  S7=LEN(T$(1))
  61. 660  FOR I=2 TO L+1
  62. 670  IF LEN(T$(I))>S7 THEN S7=LEN(T$(I))
  63. 680  NEXT I
  64. 690  I=S7
  65. 700  FOR J=1 TO L+1
  66. 710  I1=LEN(T$(J))
  67. 720  IF I-I1=0 THEN 750
  68. 730  T$(J)=" "+T$(J)
  69. 740  GOTO 710
  70. 750  NEXT J
  71. 760  FOR J=1 TO I
  72. 770  PRINT #2,TAB(36);MID$(T$(1),J,1);
  73. 780  FOR K=2 TO L+1
  74. 790  PRINT #2,MID$(T$(K),J,1);
  75. 800  NEXT K
  76. 810  PRINT #2,G9$
  77. 820  NEXT J
  78. 830  REM **** PRINTING HEADINGS AND DASHES ****
  79. 840  PRINT #2," ACT    DESCRIPTION                ";
  80. 850  T2$=""
  81. 855  FOR K=1 TO L+1
  82. 860  T2$=T2$+"="
  83. 870  NEXT
  84. 875  PRINT #2,T2$
  85. 880  PRINT #2,G9$
  86. 890  RETURN
  87. 900  REM **** CONVERT TO MONTH DAY YEAR IN STRING FORMAT ****
  88. 910  P6$=STR$(A6)
  89. 930  IF LEN(P6$)=6 THEN P6$=" "+P6$
  90. 940  U9=VAL(LEFT$(P6$,3))
  91. 950  P6$=X$(U9)+RIGHT$(P6$,4)
  92. 960  RETURN
  93. 970  T4=INT((L+3)/2)
  94. 980  PRINT #2,G8$
  95. 990  PRINT #2,TAB(T4);"CRITICAL PATH ANALYSIS: BAR CHART"
  96. 1000  PRINT #2,G9$
  97. 1010  T4=INT((L+8)/2)
  98. 1020  PRINT #2,G9$
  99. 1030  PRINT #2,TAB(T4+10);"LEGEND"
  100. 1040  PRINT #2,TAB(T4);"==========================="
  101. 1050  PRINT #2,TAB(T4);"==   CRITICAL PATH = #   =="
  102. 1060  PRINT #2,TAB(T4);"== ACTIVITY DURATION = * =="
  103. 1070  PRINT #2,TAB(T4);"==     FLOAT TIME = -    =="
  104. 1080  PRINT #2,TAB(T4);"== FINISHED ACTIVITY = C =="
  105. 1090  PRINT #2,TAB(T4);"==   CONTINUATIONS = < > =="
  106. 1100  PRINT #2,TAB(T4);"==========================="
  107. 1110  PRINT #2,G9$
  108. 1120  P4$="PROJECT NAME : "+P$
  109. 1130  T4=INT((L+15-LEN(P4$))/2)
  110. 1140  PRINT #2,TAB(T4);P4$;"    RUN DATE: ";X$(B4);B5;"19";RIGHT$(STR$(B6),2)
  111. 1150  PRINT #2,G9$
  112. 1160  PRINT #2,G9$
  113. 1170  IF LEFT$(W$,1)<>"P" THEN 1210 ELSE PRINT #2,TAB(20);"REQUESTED WIDTH =";
  114. 1180  PRINT #2,L;" REQUESTED DAYS = ";D6-D5;
  115. 1190  T4=64
  116. 1200  GOTO 1220
  117. 1210  T4=INT((L+27-LEN(T6$))/2)
  118. 1220  PRINT #2,TAB(T4);"TIME PERIOD = ";T6$;
  119. 1230  PRINT #2, USING " * ###.##";Q
  120. 1240  PRINT #2,G9$
  121. 1250  IF LEFT$(W$,1)="P" THEN 1270 ELSE D5=1
  122. 1260  D6=D5+C3
  123. 1270  GOSUB 550
  124. 1280  K5=0
  125. 1290  A$="*"
  126. 1300  B$="-"
  127. 1320  PRINT #2,G9$
  128. 1330  PRINT " **** FORMING BAR CHART ****"
  129. 1360  FOR I=1 TO N
  130. 1370  W=I
  131. 1380  IF V5=1 THEN 1410
  132. 1390  IF ES(W)+1>D6 THEN 1730
  133. 1400  IF LF(W)+1<D5 AND EF(W)+1<D5 THEN 1730
  134. 1410  IF EF(W)=LF(W) THEN A$="#" ELSE A$="*"
  135. 1420  IF R6$(W)<>"" THEN A$="C"
  136. 1430  IF V5=1 THEN 1450
  137. 1440  IF A$="C" AND EF(W)+1<D5 THEN 1730
  138. 1450  IF V5=1 AND D6<ES(W)+1 THEN 1690
  139. 1460  IF D5>=ES(W)+1 THEN A=D5 ELSE A=ES(W)+1
  140. 1470  IF D6<=LF(W)+1 THEN C=D6 ELSE C=LF(W)+1
  141. 1480  IF D5>=EF(W)+1 THEN B=D5 ELSE 1500
  142. 1490  IF D5>=EF(W)+1 THEN 1510
  143. 1500  IF D6<=EF(W)+1 THEN B=D6 ELSE B=EF(W)+1
  144. 1510  A=INT((A-D5)/Q)+5
  145. 1520  C=INT((C-D5)/Q)+5
  146. 1530  B=INT((B-D5)/Q)+5
  147. 1540  PRINT #2,LEFT$(D$(W),32);TAB(A+30);
  148. 1550  IF D5>ES(W)+1 OR D5>EF(W)+1 THEN PRINT #2,"<"; ELSE PRINT #2," ";
  149. 1560  IF D5>=EF(W)+1 THEN B=B-1 ELSE 1580
  150. 1570  IF V5=1 AND A$="C" AND EF(W)+1<D5 THEN 1720 ELSE 1650
  151. 1580  FOR J=A TO B
  152. 1610  PRINT #2,A$;
  153. 1620  NEXT J
  154. 1630  IF A$="C" THEN 1680    'STOP AT EARLY FINISH OF COMPLETE ACT
  155. 1640  IF D6<=EF(W)+1 OR B>=C THEN 1710
  156. 1650  FOR J=B+1 TO C
  157. 1660  PRINT #2,B$;
  158. 1670  NEXT J
  159. 1680  IF A$="C" AND D6>EF(W)+1 THEN 1720 ELSE 1710
  160. 1690  PRINT #2,LEFT$(D$(W),33);TAB(36+D6-D5);">";
  161. 1700  GOTO 1720
  162. 1710  IF D6<LF(W)+1 OR D6<EF(W)+1 THEN PRINT #2,">";
  163. 1720  PRINT #2,G9$
  164. 1730  NEXT I
  165. 1740  GOTO 400
  166. 1750  FOR J=1 TO C3+1   '**** FIND DATE AND RETURN POINTER *****
  167. 1760  IF A7=A(J) THEN 1810
  168. 1770  NEXT J
  169. 1780  BEEP:PRINT "**** DAY";A7;"MUST BE BETWEEN";A(1);"AND";A(C3+1);" NO HOLIDAYS ****"
  170. 1790  INPUT "Enter new day (MMDDYY) ",A7
  171. 1800  GOTO 1750
  172. 1810  RETURN
  173. 5000  REM **** READING IN ALREADY CREATED INPUT FILE ******************
  174. 5010  INPUT "Enter the name of the input file [.CPM] ";G$
  175. 5015  IF G$="Q" OR G$="QUIT" THEN 3500
  176. 5020  P=INSTR(1,G$,"."):IF P<>0 THEN F$=LEFT$(G$,INSTR(1,G$,".")-1) ELSE F$=G$
  177. 5030  IF LEN(F$)>8 THEN PRINT "**** NOT A VALID PCPM FILE ****":BEEP:GOTO 5010
  178. 5035  ON ERROR GOTO 5300
  179. 5037  G$=F$+".CPM"
  180. 5040  OPEN G$ FOR INPUT AS #3
  181. 5050  INPUT #3,P$,T6$,DA$
  182. 5140  M6=VAL(LEFT$(DA$,2)):D6=VAL(MID$(DA$,3,2)):Y6=VAL(RIGHT$(DA$,2))
  183. 5150  CLOSE #3
  184. 5160  PRINT " **** INPUT FILE READ ****"
  185. 5170  RETURN
  186. 5300  PRINT "**** FILE DOES NOT EXIST - TRY AGAIN ****":BEEP:GOTO 5000
  187. 7000  REM ** CREATE ARRAY OF MMDDYYS ******************************
  188. 7005  PRINT "**** CALCULATING DAYS ****"
  189. 7008  D1=1
  190. 7010  IF A(1)=0 THEN A(1)=M6*10000+D6*100+Y6
  191. 7020  D1=D1+1
  192. 7030  IF D1>C3+1 THEN RETURN
  193. 7040  A8=A8+1
  194. 7050  GOSUB 7130
  195. 7060  IF LEFT$(T6$,3)="CAL" THEN 7070 ELSE IF D4=6 OR D4=7 THEN 7040
  196. 7070  O8=0
  197. 7080  GOSUB 7240
  198. 7090  IF O8=1 THEN 7040
  199. 7100  A(D1)=M5*10000+D5*100+Y5
  200. 7110  GOTO 7020
  201. 7120  REM ** CONVERT CENTURY DAY TO MM, DD, YY **************************
  202. 7130  T9=INT(A8/1461)
  203. 7140  Y5=INT((A8-T9+364)/365)
  204. 7150  Y4=A8-INT((Y5-1)*1461/4)
  205. 7160  L8=2
  206. 7170  IF Y5/4=INT(Y5/4) THEN L8=1
  207. 7180  T9=Y4
  208. 7190  IF T9>61-L8 THEN T9=T9+L8
  209. 7200  M5=INT((T9*9+269)/275)
  210. 7210  D5=T9-INT(M5*275/9)+30
  211. 7220  D4=A8-INT(A8/7)*7+1
  212. 7230  RETURN
  213. 7240  FOR J=1 TO H9   '**** HOLIDAY OR NOT ***********************************
  214. 7250  IF A8=A3(J) THEN O8=1
  215. 7260  NEXT J
  216. 7270  RETURN
  217. 8000  ON ERROR GOTO 8200
  218. 8010  OPEN F$+".HOL" FOR INPUT AS #1
  219. 8020  J=0
  220. 8030  J=J+1
  221. 8040  IF EOF(1) THEN 8100
  222. 8050  INPUT #1,A3(J)
  223. 8060  GOTO 8030
  224. 8100  H9=J-1  'NUMBER OF HOLIDAYS
  225. 8110  CLOSE #1:RETURN
  226. 8200  PRINT "**** NO HOLIDAY FILE - CONTINUING ****":RESUME 8110
  227. 9000  REM READING IN SORT FILE
  228. 9010  ON ERROR GOTO 9200    'NO SORT FILE
  229. 9020  OPEN F$+".LGS" FOR INPUT AS #1
  230. 9030  INPUT #1,A8,A(1),C3
  231. 9040  I=0
  232. 9050  I=I+1
  233. 9060  IF EOF(1) THEN 9100
  234. 9065  IF I MOD 10=0 THEN PRINT I;
  235. 9070  INPUT #1,D$(I),S,F,O2,D,ES(I),LS,EF(I),LF(I),FL,R6$(I),B
  236. 9080  GOTO 9050
  237. 9100  N=I-1
  238. 9105  PRINT " **** LGS FILE READ ****"
  239. 9110  CLOSE #1:RETURN
  240. 9200  PRINT "FILE ";F$;".LGS MUST BE CREATED BY OPTION 5 FIRST AND EXIST ON DISK****":BEEP:CHAIN "CPAMENU"
  241.